package rs;// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 

import rs.sign.signlink;

public final class Cache {

    public Cache(int i) {
        emptyNodeSub = new NodeSub();
        nodeSubList = new NodeSubList();
        initialCount = i;
        spaceLeft = i;
        nodeCache = new NodeCache();
    }

    public NodeSub insertFromCache(long l) {
        NodeSub nodeSub = (NodeSub) nodeCache.findNodeByID(l);
        if (nodeSub != null) {
            nodeSubList.insertHead(nodeSub);
        }
        return nodeSub;
    }

    public void removeFromCache(NodeSub nodeSub, long l) {
        try {
            if (spaceLeft == 0) {
                NodeSub nodeSub_1 = nodeSubList.popTail();
                nodeSub_1.unlink();
                nodeSub_1.unlinkSub();
                if (nodeSub_1 == emptyNodeSub) {
                    NodeSub nodeSub_2 = nodeSubList.popTail();
                    nodeSub_2.unlink();
                    nodeSub_2.unlinkSub();
                }
            } else {
                spaceLeft--;
            }
            nodeCache.removeFromCache(nodeSub, l);
            nodeSubList.insertHead(nodeSub);
            return;
        }
        catch (RuntimeException runtimeexception) {
            signlink.reporterror("47547, " + nodeSub + ", " + l + ", " + (byte) 2 + ", " + runtimeexception.toString());
        }
        throw new RuntimeException();
    }

    public void unlinkAll() {
        do {
            NodeSub nodeSub = nodeSubList.popTail();
            if (nodeSub != null) {
                nodeSub.unlink();
                nodeSub.unlinkSub();
            } else {
                spaceLeft = initialCount;
                return;
            }
        } while (true);
    }

    private final NodeSub emptyNodeSub;
    private final int initialCount;
    private int spaceLeft;
    private final NodeCache nodeCache;
    private final NodeSubList nodeSubList;
}
